웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > sql

[SQL] 쿼리문의 where in 연산자와 like를 동시 사용하는 방법

Last Modified : 2020-06-26 / Created : 2014-08-30
40,584
View Count
관계형 데이터베이스(RDBMS)에서 WHERE IN 그리고 LIKE, % 연산자를 동시에 사용할 수는 방법은 없는 것일까요? 만약 아래와 같은 상황이 있다면 어떻게 해야할까요?

i. 컬럼명 favorite을 찾는다.
ii. 해당 컬럼에서 값이 rankingis 그리고 com이 함께 포함된 레코드를 찾는다.



# 일반적인 경우 문자열 찾기 쿼리문

매우 간단한 쿼리문입니다. 원하는 레코트값만 불러오려고 할때... 가장 쉽게 사용할 수 있는 방법이 아래와 같겠죠.
SELECT * FROM table WHERE favorite='webisfree';
// webisfree는 찾았으나 com이 포함되지 않았음

SELECT * FROM table WHERE favorite='webisfree.com';
// 중간에 . 이 포함이 되어있어 이 방법도 원하는 결과는 아님

SELECT * FROM table WHERE favorite LIKE'%rankingis%';
// like를 이용하면 중간에 포함된 경우라도 불러올 수 있음. 그러나 이 역시 com이 포함되지 않음



둘 다 만족하려면 아래와 같이 사용해야겠군요.
SELECT * FROM table WHERE favorite LIKE '%webisfree%' AND favorite LIKE'%com%';
// 결국 이 방법이 가장 많은 쿼리문임

위 예제를 보면 like 연산자를 사용해 원하는 필드에 특정 레코드값이 포함된 쿼리문을 쉽게 만들 수 있었습니다. 그런데 레코드에서 찾을 색인이 많은 경우라면 어떨까요? 예를 들어 webisfree, com, blog, best 등등이 함께 포함된 단어를 찾고자 합니다. 이 경우 쿼리문은 어떻게 될까요?
SELECT * FROM table
WHERE
favorite LIKE '%webisfree%'
AND favoritesite LIKE'%com%'
AND favoritesite LIKE'%blog%'
AND favoritesite LIKE'%best%'
// 쿼리는 완성되었지만 굉장히 복잡함

아래는 WHERE IN 을 사용하여 구현한 방법입니다.
SELECT * FROM table WHERE favoritesite IN ('webisfree', 'com', 'blog', 'best');
IN 연산자를 알고 있다면 위과 같은 코드를 생각했을 것입니다. 코드가 간결하고 쉽습니다. 하지만 앞이나 뒤에 원하는 값이 아닌 다른 문자가 붙어있다면 검색이 되지 않습니다.

위 예제에서는 IN 연산자를 사용해 간략하게 쿼리문을 만들 수 있지만 webisfree와 정확히 일치하지 않고 앞이나 뒤에 텍스트가 붙은 awebisfree 아니면 webisfreeb 같은 경우 검색되지 않습니다...

물론 이미 앞에서 다수의 LIKE연산자를 사용하면 해결할 수 있겠지만 실제로 WHERE IN 내부에 % 키워드를 사용하는 경우 동작하지 않더군요... 결론은 IN 연산자의 찾을 값에 LIKE를 함께 사용하면 굉장히 간단할텐데 그럴 수는 없을까요?


! 마치면서

알아본바로는 방법이 없습니다. 즉, 다른 방식으로 쿼리문을 작성하여야하죠.. 물론 특정 SQL언어에서는 가능할지도 모르겠습니다.

Previous

[SQL] 테이블 안의 컬럼 값 변경, 수정, UPDATE

Previous

[SQL] 한글 초성, 자음 검색기능 구현하기